# 版本: 1.0.0.20250825
# 作者: 陈振玺
# 功能: 安装和依赖管理脚本

# 定义所需包的列表，按依赖顺序排列
required_packages <- c(
  "ggplot2",  # 基础可视化包
  "dplyr",    # 数据处理基础包
  "tidyr",    # 数据整理包
  "readxl",   # Excel读取包
  "readr",    # CSV读取包
  "scales",   # 图形比例包（ggplot2依赖）
  "gtable",   # 图形布局包（ggplot2依赖）
  "purrr",    # 函数式编程包
  "cpp11",    # C++接口包
  "vroom",    # 快速数据读取包
  "tzdb",     # 时区数据库包
  "broom",    # 模型结果整理包
  "car",      # 统计分析包
  "ggrepel",  # 防止标签重叠包
  "ggsci",    # 科学期刊配色包
  "cowplot",  # 图形组合包
  "ggsignif", # 显著性标记包
  "gridExtra",# 图形布局扩展包
  "rstatix",  # 统计检验包
  "ggpubr",   # 统计图形包
  "optparse", # 命令行参数解析包
  "FactoMineR", # PCA分析包
  "factoextra" # PCA可视化包
)

# 检查并安装缺失的包
install_if_missing <- function(packages) {
  # 按顺序安装包，确保依赖关系
  for (pkg in packages) {
    if (!(pkg %in% installed.packages()[,"Package"])) {
      cat(paste0("正在安装包: ", pkg, "\n"))
      tryCatch({
        install.packages(pkg, dependencies = TRUE, repos = "https://cran.rstudio.com/")
        cat(paste0("包 ", pkg, " 安装成功\n"))
      }, error = function(e) {
        cat(paste0("包 ", pkg, " 安装失败: ", e$message, "\n"))
      })
    } else {
      cat(paste0("包 ", pkg, " 已安装\n"))
    }
  }
}

# 安装所需包
install_if_missing(required_packages)

# 加载所有包，添加错误处理
for (pkg in required_packages) {
  tryCatch({
    library(pkg, character.only = TRUE)
    cat(paste0("包 ", pkg, " 加载成功\n"))
  }, error = function(e) {
    cat(paste0("包 ", pkg, " 加载失败: ", e$message, "\n"))
  })
}

message("所有依赖包安装和加载过程已完成")